package com.paulshiyc.imserver.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.paulshiyc.imserver.bean.User;
/**
 * 处理用户登录控制器
 * @author PaulShi
 *
 */
@Controller
public class LoginController extends BaseController {
	/**
	 * 用户登录
	 * 
	 * @param req 请求
	 * @param username 用户名
	 * @param userpwd 密码
	 * @return 状态 (成功/失败)
	 */
	@RequestMapping("/login")
	@ResponseBody
	public String login(HttpServletRequest req, String username, String userpwd) {
		//判断用户名密码是否为空
		if (username != null && userpwd != null) {
			//根据用户名获取用户
			User user = users.get(username);
			//判断用户是否存在
			if (user == null) {
				//不存在响应失败
				return "fail_name";
			}
			//判断密码是否正确
			if (!userpwd.equals(user.getPassword())) {
				//不正确响应失败
				return "fail";
			}
			//获取sessionId以方便维持登录
			String sessionId = req.getSession(true).getId();
			//根据用户名获取上次登录的sessionId
			String oldSessionId = userNameAndSession.get(username);
			//判断上次sessionId与本次sessionId是否相同 即判断是否同一个session
			if (sessionId.equals(oldSessionId)) {
				//若相同 为同一个会话 则响应成功
				return "success";
			}
			//判断是否第一次登录
			if (oldSessionId == null) {
				//保存用户名关联sessionId
				userNameAndSession.put(username, sessionId);
				//保存sessionId关联用户
				sessionAndUser.put(sessionId, user);
				//响应成功
				return "success";
			//判断上一次登录会话与本次会话
			} else if(!oldSessionId.equals(sessionId)) {
				//删除上次会话保存与用户的关联
				sessionAndUser.remove(oldSessionId);
				//保存新的关联
				sessionAndUser.put(sessionId, user);
				//替换sessionId
				userNameAndSession.put(username, sessionId);
				//响应成功
				return "success";
			} 
		}
		//其他响应失败
		return "fail";
	}
}
